﻿using System
;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Clases;

namespace Ferreteria.Forms
{
    public partial class frmPedidosPendientes : Form
    {
        DisancoEntities context;
        DataTable dtPendientes;
        int pedido_Id;

        public frmPedidosPendientes()
        {
            InitializeComponent();

            lblIva.Text = "IVA (" + Constantes.IVA.ToString("0 %") + ")";

            dtPendientes = new DataTable();
            dtPendientes.Columns.Add("id");
            dtPendientes.Columns.Add("Fecha");
            dtPendientes.Columns.Add("Hora");
            dtPendientes.Columns.Add("Cliente");
            dtPendientes.Columns.Add("Monto");

            cargarListaPendientes();
        }

        private void cargarListaPendientes()
        {
            try
            {
                context = new DisancoEntities();

                dtPendientes.Rows.Clear();
            
                foreach (var preventa in context.Pedido)
                {
                    if (preventa.ped_estado == Estado.Pendiente)
                    {
                        DataRow dtFila = dtPendientes.NewRow();
                        dtFila["id"] = preventa.ped_id;
                        dtFila["Fecha"] = preventa.ped_fecha.ToShortDateString();
                        dtFila["Hora"] = preventa.ped_fecha.ToShortTimeString();
                        dtFila["Cliente"] = preventa.Clientes.cliente_nombre;

                        decimal monto = 0;
                        foreach (var linea in preventa.LineaPedido)
                        {
                            monto = monto + (linea.ped_precio * linea.ped_cant);
                        }

                        dtFila["Monto"] = "$ " + monto;

                        dtPendientes.Rows.Add(dtFila);
                    }
                }

                dgvPendientes.DataSource = dtPendientes;
                dgvPendientes.Columns["id"].Visible = false;


                dgvPendientes.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvPendientes.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }

            pedido_Id = 0;
            dgvDetalles.DataSource = null;
            btnDescartar.Enabled = false;
            btnEmitirFactura.Enabled = false;
            btnEditarPedido.Enabled = false;
            btnEmitirComprobante.Enabled = false;

            lblCliente.Text = "";
            lblCondIva.Text = "";
            lblCuit.Text = "";
            lblDireccion.Text = "";
            lblDNI.Text = "";

            numDescuento.Value = 0;
            txbIVA.Text = "";
            txbSubTotal.Text = "";
            txbTotalconIva.Text = "";
            txbTotalsinIva.Text = "";
            
        }

        private void cargarDetalles()
        {
            try
            {
                context = new DisancoEntities();

                var dgrfilaSeleccionada = dgvPendientes.CurrentRow;

                pedido_Id = Convert.ToInt32(dgrfilaSeleccionada.Cells["id"].Value);

                DataTable dtDetalles = new DataTable();
                dtDetalles.Columns.Add("id");
                dtDetalles.Columns.Add("Articulo");
                dtDetalles.Columns.Add("Cantidad");
                dtDetalles.Columns.Add("Precio Unitario");
                dtDetalles.Columns.Add("Total");

                var preVenta = context.Pedido.FirstOrDefault(p => p.ped_id == pedido_Id);

                lblCliente.Text = preVenta.Clientes.cliente_nombre;
                lblDireccion.Text = preVenta.Clientes.cliente_direccion;

                if (preVenta.Clientes.condicion_id != null)
                {
                    lblCondIva.Text = preVenta.Clientes.CondicionIVA.condicion_sigla;
                }

                lblCuit.Text = preVenta.Clientes.cliente_cuit;
                lblDNI.Text = preVenta.Clientes.cliente_nro_doc.ToString();

                decimal monto = 0;

                foreach (var lineaPrev in preVenta.LineaPedido)
                {
                    DataRow dtFila = dtDetalles.NewRow();

                    dtFila["id"] = lineaPrev.linped_id;
                    dtFila["Articulo"] = lineaPrev.Articulos.art_nombre;
                    dtFila["Cantidad"] = lineaPrev.ped_cant;
                    dtFila["Precio Unitario"] = "$ " + lineaPrev.ped_precio;
                    dtFila["Total"] = "$ " + lineaPrev.ped_precio * lineaPrev.ped_cant;

                    monto = monto + (lineaPrev.ped_precio * lineaPrev.ped_cant);

                    dtDetalles.Rows.Add(dtFila);
                }

                monto = Decimal.Round(monto, 2);

                dgvDetalles.DataSource = dtDetalles;
                dgvDetalles.Columns["id"].Visible = false;
                dgvDetalles.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvDetalles.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

                txbSubTotal.Text = monto.ToString();

                calcularTotales();

                btnDescartar.Enabled = true;
                btnEmitirFactura.Enabled = true;
                btnEditarPedido.Enabled = true;
                btnEmitirComprobante.Enabled = true;
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
        }

        private void calcularTotales()
        {
            if (txbSubTotal.Text != "")
            {
                decimal subtotal = Convert.ToDecimal(txbSubTotal.Text);

                decimal descuento = numDescuento.Value;

                decimal totalSinIva = Decimal.Round(subtotal / (1 + descuento), 2); 
                decimal iva = Decimal.Round(totalSinIva * Clases.Constantes.IVA, 2);
                decimal totalConIva = Decimal.Round(totalSinIva + iva, 2);

                txbIVA.Text = "$ " + iva.ToString();
                txbTotalconIva.Text = "$ " + totalConIva.ToString();
                txbTotalsinIva.Text = "$ " + totalSinIva.ToString();
            }
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            cargarListaPendientes();
        }

        private void dgvPendientes_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            cargarDetalles();
        }

        private void numDescuento_ValueChanged(object sender, EventArgs e)
        {
            calcularTotales();
        }

        private void btnDescartar_Click(object sender, EventArgs e)
        {
            var preVenta = context.Pedido.FirstOrDefault(p => p.ped_id == pedido_Id);

            preVenta.ped_estado = Estado.Anulada;

            context.SaveChanges();

            cargarListaPendientes();
        }

        private void btnEmitirFactura_Click(object sender, EventArgs e)
        {
            frmEmitirFactura nuevaFactura = new frmEmitirFactura(pedido_Id);
            nuevaFactura.ShowDialog();
            cargarListaPendientes();
        }

        private void btnEditarPedido_Click(object sender, EventArgs e)
        {
            frmAgregarPedido ped = new frmAgregarPedido(pedido_Id);
            ped.ShowDialog();

            context = new DisancoEntities();

            DataTable dtDetalles = new DataTable();
            dtDetalles.Columns.Add("id");
            dtDetalles.Columns.Add("Articulo");
            dtDetalles.Columns.Add("Cantidad");
            dtDetalles.Columns.Add("Precio Unitario");
            dtDetalles.Columns.Add("Total");

            var preVenta = context.Pedido.FirstOrDefault(p => p.ped_id == pedido_Id);

            lblCliente.Text = preVenta.Clientes.cliente_nombre;
            lblDireccion.Text = preVenta.Clientes.cliente_direccion;

            if (preVenta.Clientes.condicion_id != null)
            {
                lblCondIva.Text = preVenta.Clientes.CondicionIVA.condicion_sigla;
            }

            lblCuit.Text = preVenta.Clientes.cliente_cuit;
            lblDNI.Text = preVenta.Clientes.cliente_nro_doc.ToString();

            decimal monto = 0;

            foreach (var lineaPrev in preVenta.LineaPedido)
            {
                DataRow dtFila = dtDetalles.NewRow();

                dtFila["id"] = lineaPrev.linped_id;
                dtFila["Articulo"] = lineaPrev.Articulos.art_nombre;
                dtFila["Cantidad"] = lineaPrev.ped_cant;
                dtFila["Precio Unitario"] = lineaPrev.ped_precio;
                dtFila["Total"] = lineaPrev.ped_precio * lineaPrev.ped_cant;

                monto = monto + (lineaPrev.ped_precio * lineaPrev.ped_cant);

                dtDetalles.Rows.Add(dtFila);
            }

            monto = Decimal.Round(monto, 2);

            dgvDetalles.DataSource = dtDetalles;
            dgvDetalles.Columns["id"].Visible = false;

            txbSubTotal.Text = monto.ToString();

            calcularTotales();

            btnDescartar.Enabled = true;
            btnEmitirFactura.Enabled = true;
            btnEditarPedido.Enabled = true;
        }

        private void btnEmitirComprobante_Click(object sender, EventArgs e)
        {
            frmEmitirComprobante comp = new frmEmitirComprobante(pedido_Id);
            comp.ShowDialog();
            cargarListaPendientes();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
